[C] Manipulação de vetores/ponteiros

Publicado por Enzo de Brito Ferber (última atualização em 15/09/2010)

[ Hits: 11.089 ]

Homepage: http://www.maximasonorizacao.com.br

Download vet.c




Programa que mistura a manipulação de vetores e ponteiros para criar um vetor C baseado em outros 2 vetores A e B. O vetor C conterá todos os elementos de A mais os elementos não repetidos de B.

  



Esconder código-fonte

// vet.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define ELEMENTS         5
#define COMB             10

#define TRUE             1
#define FALSE            0

int *geraVet( int a[], int b[] )
{
     register int i, j;
     int found;
     
     // o maximo de elementos que o vetor pode ter é COMB ( a + b ), 
     // caso nenhum dos elementos sejam repetidos
     int *c = (int *) malloc( COMB * sizeof( int ));
     int *d;
     
     // check de memoria
     if ( !c ) return NULL;
     
     /* PONTEIROS
      * ---------
      * 
      * O uso de ponteiros é melhor para não causar problemas 
      * no retorno da funçao, e também possibilitam uma manipulação
      * melhor dos dados.
      *
      */
     
     // inicializa o vetor
     for( i = 0; i < COMB; i++ )
          c[ i ] = 0;
     
     // copia dos elementos do primeiro vetor
     for( i = 0; i < ELEMENTS; i++ )
          c[ i ] = a[ i ];
     
     // 'd' é usado como referencia para o proximo endereço vazio do ponteiro 'c'
     d = c + ELEMENTS;
     
     // copia com comparação de repetição
     for( j = 0; j < ELEMENTS; j++ )
     {
          // variavel de controle
          found = FALSE;
          
          // loop de comparação
          for( i = 0; i < ELEMENTS; i++ )
               if ( b[j] == c[i] ) found = TRUE;
               
          // se o elemento nao for repetido, a copia é feita.
          if ( !found) *(d++) = b[j];
     }
     
     // retorno do endereço do ponteiro
     return c;
}

int main( int argc, char *argv[] )
{
     // vetores de teste
     int a[] = { 1, 2, 3, 4, 5  };
     int b[] = { 2, 3, 4, 5, 6  };
     int c[] = { 5, 6, 7, 8, 9  };
     int d[] = { 6, 7, 8, 9, 10 };
     
     // retorno
     int *ret;
     
     // controladores de loop
     register int i;
     
     /* COMBINAÇÕES:
      *
      * A - B       B - C     
      * A - C       B - D
      * A - D       C - D
      */
      
     // combinação
     ret = geraVet( a, b );
     
     // impressão do vetor
     for( i = 0; i < COMB; i++ )
          printf( "ret[ %2d ]: %2d\n", i, ret[ i ]);
     
     // fim do programa
     return 0;
}

Scripts recomendados

Structs dinâmicos com UNION

Calculo de Área e Diametro do circulo

Números primos

Binário para decimal

Cálculo de Energia de um Corpo


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts